/**
 * @author wn
 * @date 2022/11/10 16:07:58
 * @description: element-plus 表单校验规则
 */

/**
 *  input 框 应该选 , trigger: 'blur'  失去焦点
 *  下拉框 el-select、日期选择器 el-date-picker、
 *  复选框 el-checkbox、单选框 el-radio验证时，trigger的值选择change
 *
 *  经过测试 什么也不设置 效果 与上面  分别设置一致
 *
 *  自定义校验规则  两个参数(接收参数,校验参数) 一个 回调 callback 是否有 Error
 */

// import { reactive } from 'vue'
import { CkEmail, CkPass } from './verification'

// 自定义校验规则
const validateEmail = (rule, value, callback) => {
	if (!value) {
		return callback(new Error('邮箱不能为空！！'))
	} else if (CkEmail(value)) {
		return callback(new Error('邮箱格式不正确！！'))
	} else {
		callback()
	}
}
const validatePass = (rule, value, callback) => {
	if (!value) {
		callback(new Error('密码不能为空'))
	} else if (CkPass(value)) {
		callback(new Error('密码格式有误必须在6至15位字母+数字！！'))
	} else {
		callback()
	}
}
const validateCheckPass = (isLogin, formData) => (rule, value, callback) => {
	// 因为登录的时候没有重复密码的校验  所以在登录的时候取消重复密码的校验
	if (isLogin.value) {
		callback()
	}
	if (!value) {
		callback(new Error('重复密码不能为空！'))
	} else if (value !== formData.pass) {
		callback(new Error('两次密码必须相同！'))
	} else {
		callback()
	}
}

// custom  自定义校验规则   接收   form实例  与 formData
// rule 中接收参数  导致直接校验 原因不明  这里通过函数 传递参数
export const customRules = (isLogin, formData) => ({
	// 账号
	email: [
		{
			required: true,
			validator: validateEmail,
			trigger: 'blur',
		},
	],
	// 密码
	pass: [
		{
			required: true,
			validator: validatePass,
			trigger: 'blur',
		},
	],
	// 确认密码
	checkPass: [
		{
			required: true,
			validator: validateCheckPass(isLogin, formData),
			trigger: 'blur',
			// formData,
		},
	],
})
